package com.example.review.recycleView;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;


import com.example.review.R;

import java.util.List;

/**
 * recycleView的适配器 添加了点击事件
 */
public class FruitAdapter2 extends RecyclerView.Adapter<FruitAdapter2.ViewHolder> {
    private List<Fruit> mFruitList;
    //静态内部类
    static class ViewHolder extends RecyclerView.ViewHolder{
        ImageView fruitImage;
        TextView fruitName;
        View fruitView;
        //View这个参数通常就是RecyclerView子项的最 外层布局
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            //fruitView 变量来保存子项最外层 布局的实例
            fruitView=itemView;
            fruitImage=itemView.findViewById(R.id.fruit_image2);
            fruitName=itemView.findViewById(R.id.fruit_name2);
        }
    }
    //构造函数 这个方法用于把要展示的数据源传进来， 并赋值给一个全局变量mFruitList ，我们后续的操作都将在这个数据源的基础上进行
    public FruitAdapter2(List<Fruit> fruitList) {
        mFruitList = fruitList;
    }






    /**
     * FruitAdapter2 是继承自RecyclerView.Adapter 的，那么就必须重写 onCreateViewHolder() 、onBindViewHolder() 和getItemCount() 这3个方 法。
     *
     */



    @NonNull
    @Override
    /**
     * 用于创建ViewHolder 实例的，我们在这个方法中 将recycleview_item 布局加载进来，然后创建一个ViewHolder 实例，
     * 并把加载出来的布局传入到 构造函数当中，最后将ViewHolder 的实例返回
     */
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        /*View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.recycleview_item,parent,false);
        ViewHolder viewHolder=new ViewHolder(view);
        return viewHolder;*/
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycleview_item, parent, false);
        final ViewHolder holder = new ViewHolder(view);
        //最外层布局的点击事件
        holder.fruitView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //用户点击的位置
                int position = holder.getAdapterPosition();
                //通过位置拿到fruit实例
                Fruit fruit = mFruitList.get(position);
                Toast.makeText(v.getContext(), "you clicked view " + fruit.getName(), Toast.LENGTH_SHORT).show();
            }
        });
        //ImageView的点击事件
        holder.fruitImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //用户点击的位置
                int position = holder.getAdapterPosition();
                //通过位置拿到fruit实例
                Fruit fruit = mFruitList.get(position);
                Toast.makeText(v.getContext(), "you clicked image " + fruit.getName(), Toast.LENGTH_SHORT).show();
            }
        });
        return holder;
    }
    @Override
    /**
     * 用于对 RecyclerView子项的数据进行赋值的，会在每个子项被滚动到屏幕内的时候执行，
     * 这里我们通过 position 参数得到当前项的Fruit 实例，然后再将数据设置到ViewHolder
     * 的ImageView和 TextView当中即可。
     */
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Fruit fruit = mFruitList.get(position);
        holder.fruitImage.setImageResource(fruit.getImageId());
        holder.fruitName.setText(fruit.getName());
    }
    @Override
    /**
     * 用于告诉RecyclerView一共有多 少子项，直接返回数据源的长度就可以
     */
    public int getItemCount() {
        return mFruitList.size();
    }
}










/**
 * recycleView的适配器
 */
//public class FruitAdapter2 extends RecyclerView.Adapter<FruitAdapter2.ViewHolder> {
//
//    private List<Fruit> mFruitList;
//
//    //静态内部类
//    static class ViewHolder extends RecyclerView.ViewHolder{
//        ImageView fruitImage;
//        TextView fruitName;
//
//        //View这个参数通常就是RecyclerView子项的最 外层布局
//        public ViewHolder(@NonNull View itemView) {
//            super(itemView);
//            fruitImage=itemView.findViewById(R.id.fruit_image2);
//            fruitName=itemView.findViewById(R.id.fruit_name2);
//        }
//    }
//
//    //构造函数 这个方法用于把要展示的数据源传进来， 并赋值给一个全局变量mFruitList ，我们后续的操作都将在这个数据源的基础上进行
//    public FruitAdapter2(List<Fruit> fruitList) {
//        mFruitList = fruitList;
//    }
//
//
//    /**
//     * FruitAdapter2 是继承自RecyclerView.Adapter 的，那么就必须重写 onCreateViewHolder() 、onBindViewHolder() 和getItemCount() 这3个方 法。
//     *
//     */
//
//
//
//    @NonNull
//    @Override
//    /**
//     * 用于创建ViewHolder 实例的，我们在这个方法中 将recycleview_item 布局加载进来，然后创建一个ViewHolder 实例，
//     * 并把加载出来的布局传入到 构造函数当中，最后将ViewHolder 的实例返回
//     */
//    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.recycleview_item,parent,false);
//        ViewHolder viewHolder=new ViewHolder(view);
//        return viewHolder;
//    }
//
//    @Override
//    /**
//     * 用于对 RecyclerView子项的数据进行赋值的，会在每个子项被滚动到屏幕内的时候执行，
//     * 这里我们通过 position 参数得到当前项的Fruit 实例，然后再将数据设置到ViewHolder
//     * 的ImageView和 TextView当中即可。
//     */
//    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
//        Fruit fruit = mFruitList.get(position);
//        holder.fruitImage.setImageResource(fruit.getImageId());
//        holder.fruitName.setText(fruit.getName());
//    }
//
//    @Override
//    /**
//     * 用于告诉RecyclerView一共有多 少子项，直接返回数据源的长度就可以
//     */
//    public int getItemCount() {
//        return mFruitList.size();
//    }
//}
